//  给定一个数组nums，再给定一个数字k，要求将数组中的元素向右移动k个位置，说明：空间复杂度为O(1)的原地算法解决这个问题

// 思路：数组长度为n，可简化为多次反转，首先整体反转【0，n】
// 其次，【0，k-1】反转，最后【k，n】反转
// 时间复杂度为On
// 空间复杂度为O1

function rotate(nums, k) {
    let n = nums.length
    k = k % n
    reverse(nums, 0, n - 1)
    reverse(nums, 0, k-1)
    reverse(nums, k, n - 1)
    return nums
}

function reverse(nums, l, r) {
    let left = l
    let right = r
    while (left < right) {
        [arr[left], arr[right]] = [arr[right], arr[left]];
        left++
        right--
    }
}

let arr = [1, 2, 3, 4, 5, 6, 7]
let k = 3
rotate(arr, k)
console.log(arr);